// $Id: streamerinfo-from-raw.C 45268 2010-11-09 14:53:48Z richterm $
/**
 * @file streamerinfo-from-raw.C
 * @brief Extract the streamer info for a raw file and AliRoot version
 *
 * This macro generates the streamer info for all objects in the HLTOUT
 * payload of the specified raw file. The AliRoot version needs to be the
 * same as the one the HLTOUT payload was generated with.
 *
 * The macro has two optional parameters:
 * - filename:  default 'raw://'
 * - OCDB URI:  default 'raw.root'
 *
 * If either file or URI refers to the GRID, the macro connects to alien.
 * Make sure that ROOT is compiled with ALIEN support and that the required
 * alien API libraries can be loaded.
 *
 * You can run this macro with defaults using the following shell command:
 * @code
 *   > aliroot -b -q $ALICE_ROOT/HLT/rec/streamerinfo-from-raw.C
 * @endcode
 * With a raw file from the GRID
 * @code
 *   > aliroot -b -q streamerinfo-from-raw.C'("alien:///alice/data/2009/LHC09d/000102925/raw/09000102925035.10.root")'
 * @endcode
 *
 * Streamer info is stored in a TObjArray wrapped into an AliCDBEntry
 * object, and stored to HLT.StreamerInfo.root. This file can be used
 * directly as OCDB object, it just needs to be renamed.
 *
 * @author Matthias.Richter@ift.uib.no
 */
void streamerinfo_from_raw(const char *filename="raw.root", const char* cdbUri="raw://")
{
  TString tmpStr1=filename;
  TString tmpStr2=cdbUri;
  if ((tmpStr1.Contains("://") && !tmpStr1.BeginsWith("local://")) ||
      !tmpStr2.BeginsWith("local://")) {
    // setup the GRID connection if raw file or OCDB are from GRID
    TGrid::Connect("alien");
  }

  // Set the CDB storage location
  AliCDBManager * man = AliCDBManager::Instance();
  man->SetDefaultStorage(cdbUri);

  // Reconstruction settings
  AliReconstruction rec;
  rec.SetRunPlaneEff(kFALSE);
  rec.SetCleanESD(kFALSE);

  rec.SetInput(filename);
  rec.SetRunReconstruction("HLT");
  rec.SetOption("HLT","skip-hltout chains=schemaevo");

  AliHLTSystem* pHLT=AliHLTPluginBase::GetInstance();
  AliHLTConfiguration publisher("hltout-publisher", "AliHLTOUTPublisher" , NULL, "");
  AliHLTConfiguration collector("schemaevo", "ROOTSchemaEvolutionComponent"   , "hltout-publisher", "-file=HLT.StreamerInfo.root");

  // QA options
  rec.SetRunQA(":") ;

  AliLog::Flush();
  rec.Run();
}
